home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / C / Applications / DataScope 2.0.3 / DataScope2l / DSSource / fcmp1.c < prev    next >
Encoding:
Text File  |  1994-05-04  |  19.1 KB  |  130 lines  |  [TEXT/MPS ]

  1. */
  2.         u = t1 + (int)(x * y) - 1;
  3.         t = u - x + 1;
  4.         p = t - x;
  5.         while (t < u)    *t++ = *p++;
  6.         *t = *p;
  7.  
  8.         return;
  9. }
  10. /*
  11.     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  12.     void fn_dxv        1st derivative with respect to x, varying stepsize
  13.     
  14.                     p = pointer to first element of input array
  15.                     t1 = pointer to first element of target array
  16.                     x = number of x-points
  17.                     y = number of y-points
  18.                     m1 = coefficient vector
  19.     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  20. */
  21. void    fn_dxv(p,t1,x,y,m1)
  22.         register float        *p,*t1;
  23.         int                    x,y;
  24.         register extended    *m1;
  25. {
  26.         register float        *t,*q,*u,*v,*w;
  27.         register extended    *m2;
  28.         
  29.         t = t1;
  30.         q = p + (int)(x * y - 1);
  31.         m2 = m1 + x;
  32.  
  33.         v = p;
  34.         w = p;
  35.         p++;
  36.            
  37.         u = v + x - 1;
  38.         while (u < q)
  39.               {t++;
  40.                m1++;
  41.                p++;
  42.                w++;
  43.                m2++;
  44.                while (p < u)
  45.                      {*t++ = (float)(*m1++ * ((extended)(*p++) -
  46.                               (extended)(*w) + *m2++ * ((extended)(*w) -
  47.                              (extended)(*v++))));
  48.                       w++;
  49.                      }
  50.                *t++ = (float)(*m1++ * ((extended)(*p) - (extended)(*w) +
  51.                          *m2++ * ((extended)(*w) - (extended)(*v++))));
  52.                if (y == 1) return;
  53.                p++;    p++;
  54.                v++;    v++;
  55.                t++;
  56.                w++; w++;
  57.                u += x;
  58.                m1 -= (x - 1);
  59.                m2 -= (x - 1);
  60.               }
  61.  
  62.         t++;
  63.         m1++;
  64.         p++;
  65.         w++;
  66.         m2++;
  67.         while (p < u)
  68.               {*t++ = (float)(*m1++ * ((extended)(*p++) -
  69.                               (extended)(*w) + *m2++ * ((extended)(*w) -
  70.                              (extended)(*v++))));
  71.                w++;
  72.               }
  73.         *t++ = (float)(*m1++ * ((extended)(*p) - (extended)(*w) +
  74.                          *m2++ * ((extended)(*w) - (extended)(*v++))));
  75. /*
  76.         ****************************************************
  77.         copy 1st column from second column
  78.         ****************************************************
  79. */
  80.         u = t1;
  81.         v = t1 + 1;
  82.         w = t1 + (int)(x * y) - x;
  83.         while (u < w)
  84.               {*u = *v;
  85.                u += x;
  86.                v += x;
  87.               }
  88.         *u = *v;
  89. /*
  90.         ****************************************************
  91.         copy last column from next-to-last column
  92.         ****************************************************
  93. */
  94.         u = t1 + x - 1;
  95.         v = u - 1;
  96.         w = t1 + (int)(x * y) - 1;
  97.         while (u < w)
  98.               {*u = *v;
  99.                u += x;
  100.                v += x;
  101.               }
  102.         *u = *v;
  103.  
  104.         return;
  105. }
  106. /*
  107.         ****************************************************
  108.         Transpose the x and y-ness of the array.
  109.         ****************************************************
  110. */
  111. void
  112. fn_transpose(src,dst,x,y)
  113.     float *src,*dst;
  114.     int x,y;
  115. {
  116.     register float *f;
  117.     register int i,j;
  118.     
  119.     
  120.     for (i=0; i<y; i++) {
  121.         f = dst + i;                    /* start of new column, going down */
  122.  
  123.         for (j=0; j<x; j++) {            /* go in order of source array */
  124.             *f = *src++;
  125.             f += y;                        /* increment to next row in dest */
  126.         }
  127.     }
  128.  
  129. }
  130.